#ifndef __CYNOS_FIFO_H
#define __CYNOS_FIFO_H 

/* C++ detection */
#ifdef __cplusplus
extern "C" {
#endif
#include "cynos_cfg.h"
#include "cynos_base.h"



/*
class cynfifo_os
{
	public:
		

};

*/




typedef struct
{
	CynOS_U16 fifo_r;
	CynOS_U16 fifo_w;
}fifo_arg;


typedef struct cynfifo_os
{
/*public*/
	CYNOS_STATUS(*push)(struct cynfifo_os *fifo_handle,CynOS_VOID *data);	   
	CYNOS_STATUS(*pop)(struct cynfifo_os *fifo_handle,CynOS_VOID *data);		 
	CYNOS_STATUS(*size)(struct cynfifo_os *fifo_handle,CynOS_U16 *data);  	  	
/*protect*/
	CynOS_U8 fifo_member_size;
	CynOS_U16 fifo_deep;
	fifo_arg fifo_staus;
	CynOS_U8 *fifo;
}CynOS_FIFO;


void CynOS_FIFO_Init(CynOS_FIFO * fifo_handle,CynOS_U8 member_size,CynOS_U16 cache_size,CynOS_VOID *cache);

/* C++ detection */
#ifdef __cplusplus
}
#endif

#endif



